/*
 * Контроллер дашбоарда, поидее содержит в себе экземпляры всех виджетов
 * умеет добавлять новый виджет и умеет удалять виджет,
 * может обновить расположение виджетов на сервере
 * 
 * @author Alexander Sibiryakov
 */
function DashboardController() {
	this.cp = new cpaint();
	this.ss = new SortableSwitcher();
	this.view = new DashboardView();
	this.panel = new AddWidgetPanel(this.view.getAddPanel());	
	var widgets = new Array();
	var view = this.view;
	this.view.getWidgets().each(function(i, item){
		widgets[view.getWidgetId(item)] = new Widget(item, false, true);
	});
	this.widgets = widgets;
	
	this.backgroundOn = function() {
		this.view.backgroundOn();
	}

	this.backgroundOff = function() {
		this.view.backgroundOff();
	}
	
	/*
	 * Этот метод добавляет виджет в конфиг на сервере
	 */
	this.addWidget = function(column_id, type) {
		this.cp.set_env_object(this);
		this.cp.call(get__Url('/ajax'), 'ajax_addWidget', function(result) { 
			
			var new_widget_id = result.ajaxResponse[0].data;
			this.insertWidget(new_widget_id, column_id);

		}, column_id, type);
	
	}
	
	/*
	 * Вставит в DOM новый виджет, предварительно отрендерит его на сервере
	 */
	this.insertWidget = function(wid, column_id) {
		this.cp.set_env_object(this);
		
		this.cp.call(get__Url('/ajax'), 'ajax_renderWidget', function(result) { 
			// найдем внутри колонки кнопку
			// вставим после кнопки
			this.view.addWidget(column_id, result.ajaxResponse[0].html[0].data);
			$('.wg-sortable').css('cursor', 'move');
					
			// создать новый объект виджета
			var new_wid = new Widget(this.view.getWidgetById(wid), true, true);
			this.widgets[wid] = new_wid;
		}, wid);
	}
	
	/*
	 * Обновить колонку содержащую elt
	 */
	this.upLayout = function(elt) {
		
		var column_id = this.view.getColumnIdByWidget(elt);
		var element_ids = this.view.getWidsByColumnId(column_id);
		
		this.cp.call(get__Url('/ajax'), 'ajax_updateLayout', function(result) {}, column_id, element_ids);
	}
	
	this.upWidget = function(wid) {
		this.widgets[wid].update();	
	}
	
	/*
	 * Покажет панель добавления нового виджета
	 */
	this.panelUp = function(event) {
		
		var elt = event.target;
		var panel = event.data.panel;
		var view = event.data.view;
		var column = view.getColumnIdByAddButton(elt);
		if (column)	panel.setColumn(column);
		
		panel.show();
	}
	
	this.modOn = function() {
		this.ss.turnOn(function() {dctrl.view.ssOnStart(this);}, function() { dctrl.view.ssOnStop(this); dctrl.upLayout(this); });
	}
	
	this.modOff = function() {
		this.ss.turnOff();
	}

	
	// повесить обработчики на кнопки
	jQuery(this.view.getAddButtons()).bind("click", this, this.panelUp);
	
}


jQuery().ready(function() {
	dctrl = new DashboardController();
});



var cp = new cpaint();
/*
var new_widget_id; // id нового виджета, заполняется при добавлении
var column_to_add; // номер колонки для добалвения виджета обовляется при клике на кнопку добавить
var ajax_url;
*/

